
package TokensDelLenguaje;

import PolacaInversa.Registro;

public class Token_Registro extends Token_Uint{
    
    private Registro reg;
    
    public Token_Registro(Registro r){
        super(Tokens.const_uinteger);
        if(r.tamaño == 4)
            setId(Tokens.const_ulongint);
        this.reg = r;
    }
    
    public String getCadena(){
        return reg.nombre;
    }
    
    public String toString(){
        return "Registro " + reg.nombre;
    }
    
    public Registro getRegistro(){
        return this.reg;
    }
    
    public boolean esRegistro(){
        return true;
    }

    @Override
    public int getTamano() {
        return this.reg.tamaño;
    }
    
    @Override
    public String getNombre(){
        return this.reg.nombre;
    } 
    
    public String conversion(Registro r){
        String s = "";
        if(r.equals(this.reg)){
            s += "MOV eax, 0\n";
            s += "MOV ax, " + this.reg.nombre + "\n";
            s += "MOV " + r.nombre + ", eax\n";
            this.reg.libre = true;
        }
        else{
            s += "MOV " + r.nombre + ", 0\n";
            s += "MOV " + r.nombre.substring(r.nombre.length()-2) + ", " + this.reg.nombre + "\n";
            this.reg.libre = true;
        }
        return s;
    }
}
